perm filename NORMAL.SAI[PIC,HE] blob sn#430341 filedate 1979-04-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY NORMAL
C00005 ENDMK
C⊗;
ENTRY NORMAL;
BEGIN "NORMAL"
REQUIRE "36A" COMPILER!SWITCHES;
REQUIRE "BUFDEC.SAI" SOURCE!FILE;
INTERNAL INTEGER PROCEDURE NORMAL(INTEGER BUF,NBYTSZ,MINB,MAXB);
    BEGIN "NORMP"
    INTEGER I,J,ISTOP,JSTOP,POUTH,PICNOW,NBUF,P1,P2,TOPVAL;
    INTEGER MINBP1,OBYTE;
    REAL RPOUTH;

    COMMENT CHECK THAT THE RANGE IS GREATER THAN ZERO...VERY IMPORTANT;
    IF MAXB=MINB THEN 
	BEGIN
	OUTSTR("NORMAL: ARRGH! ZERO RANGE GIVEN CAN'T DO IT"&CRLF);
	RETURN(BUF);
	END
    ELSE
	BEGIN "NORM"
	ISTOP←ROWS(BUF);
	JSTOP←COLMS(BUF);
	OBYTE←2↑BYTSZ(BUF)-1;
	NBUF←FNDBUF;		COMMENT GET A FREE BUFFER FOR THE OUTPUT PICTURE;
	GETBUF(ISTOP,JSTOP,NBYTSZ,NBUF);
	PUTSUB(ISUBST(BUF),JSUBST(BUF),NBUF);
	TOPVAL←2↑NBYTSZ;	COMMENT 2↑NBYTSZ IS THE MAXIMUM RANGE OF THE NEW PICTURE;
	MINBP1←MINB+1;
	RPOUTH←TOPVAL/(MAXB-MINBP1);
	TOPVAL←TOPVAL-1;
	BEGIN "ARRALLOC"
	SAFE INTEGER ARRAY FCNARR[0:OBYTE];
	FOR I←0 STEP 1 UNTIL OBYTE DO	COMMENT THE LINEAR FCN NORMALIZE;
	    FCNARR[I]←((RPOUTH*(I-MINBP1)) MIN TOPVAL) MAX 0;
	FOR I←1 THRU ISTOP DO	COMMENT PERFORM THE NORMALIZING OPERATION;
	    BEGIN 
	    P1←INPTR(I,1,BUF);
	    P2←OUTPTR(I,1,NBUF);
	    FOR J←1 THRU JSTOP DO
      		BEGIN
		IFC FALSE THENC
      		PICNOW ← ILDB(P1);
      		COMMENT NORMALIZE IT CONVERT TO OUTPUT RANGE;
		IF PICNOW≥MAXB THEN POUTH←TOPVAL
		ELSE IF PICNOW≤MINB THEN POUTH←0
      		ELSE POUTH←((RPOUTH*(PICNOW-MINBP1)) min (TOPVAL)) max 0;
		COMMENT THIS HAS BEENREPLACED BY THE FCN ARRAY COMPUTATION ABOVE;
		ENDC
      		IDPB(FCNARR[ILDB(P1)],P2);
     		END ;
	    ROWCHK(CHKROW,ROWS,I,50);
    	    END ;

	END "ARRALLOC";
   	RETURN(NBUF);
   	END "NORM";
    END "NORMP";
END "NORMAL";